@function map-deep-merge($parent-map, $child-map)

  $result: $parent-map

  @each $key, $child in $child-map
  
    $parent-has-key: map-has-key($result, $key)
    $parent-value: map-get($result, $key)
    $parent-type: type-of($parent-value)
    $child-type: type-of($child)
    $parent-is-map: $parent-type == map
    $child-is-map: $child-type == map

    @if (not $parent-has-key) or ($parent-type != $child-type) or (not ($parent-is-map and $child-is-map))
      $result: map-merge($result, ( $key: $child ))

    @else
      $result: map-merge($result, ( $key: map-deep-merge($parent-value, $child) ))

  @return $result

@function map-deep-get($map, $keys...)
  @each $key in $keys
    $map: map-get($map, $key)

  @return $map
